package com.itheima.spring.bestpractive.service;

import com.github.pagehelper.PageInfo;
import com.itheima.spring.bestpractive.pojo.*;
import com.itheima.spring.bestpractive.vo.req.DisputesReqVo;
import io.swagger.v3.oas.annotations.Operation;
import com.itheima.spring.bestpractive.vo.resp.assessment.AssessmentIndicatorRespVo;

import java.util.List;
import java.util.Map;

/**
 * @version 1.0
 * @author: HZY
 * @date: 2025/6/25 17:10
 * @Content: 考核服务
 */
public interface AssessmentService {
    @Operation(description = "获取部门考核计划")
    public List<AssessmentPlan> getAssessmentPlanList(long empId);

    @Operation(description = "获取考核指标")
    public List<AssessmentIndicator> getAssessmentIndicatorList(AssessmentPlan plan);

    @Operation(description = "保存考核指标的结果")
    public void saveScore(List<EmployeeIndicatorScore>  scores);

    @Operation(description = "获取考核结果")
    public AssessmentResult getAssessmentResult(long empId,long planId);

    @Operation(description = "发布考核计划，并配置考核指标")
    public void publishAssessment(AssessmentPlan plan, List<AssessmentIndicator> indicator);

    @Operation(description = "删除考核计划")
    public void deleteAssessmentPlan(List<Long> planIds);

    @Operation(description = "获取个人考核指标")
    public List<AssessmentIndicatorRespVo> getIndicatorByPId(long planId,long empId);

    @Operation(description = "获取考核指标的分数")
    public List<EmployeeIndicatorScore> getIndicatorScore(List<Long> indicatorIds,long empId);

    @Operation(description = "根据计划名称获取计划")
    public List<AssessmentPlan> getPlanByName(String planName);

    @Operation(description = "Home获取全部考核计划")
    public List<AssessmentPlan> getAllPlan();

    @Operation(description = "Admin获取考核计划")
    public PageInfo<AssessmentPlan> getPlan(int pageNum , int pageSize);

    @Operation(description = "获取考核计划对应的考核人员")
    public List<Employee> getEvaluatorByPlanId(long planId);

    @Operation(description = "更改考核结果状态")
    public void updateResultStatus(Map<String, Object> data);

    @Operation(description = "保存异议信息")
    public void saveDisputes(Map<String, Object> disputes);

    @Operation(description = "获取异议计划")
    public List<AssessmentPlan> getDisputes();

    @Operation(description = "获取异议计划对应的全部员工")
    public List<Employee> getDisputesEmp(long planId);

    @Operation(description = "获取异议信息")
    public List<Disputes> getDisputesInfo(long planId, long employeeId);

    @Operation(description = "更新员工对计划的异议,同时更新员工指标和计划结果")
    public void updataDisputesByEmpPlan(DisputesReqVo disputesReqVo);
}

